﻿using System;
using System.Data;
using System.Data.SqlClient;
using App_Code.consultasSql.ConsultasSeguridad;
using consultasSql.consultasVarias;
using validarDatos;


public partial class Stdby_OrdenTrabajo_ingresoOrdenTrabajo : System.Web.UI.Page
{
    /*Mensajes*/

    private void mostrarMensaje(string mensaje)
    {
        System.Text.StringBuilder sbMensaje = new System.Text.StringBuilder();

        sbMensaje.Append("<script type='text/javascript'>");
        sbMensaje.AppendFormat("alert('{0}');", mensaje);
        sbMensaje.Append("</script>");
        ClientScript.RegisterClientScriptBlock(this.GetType(), "Mensaje", sbMensaje.ToString());
    }


    /*-----------*/

    protected void Page_Load(object sender, EventArgs e)
    {
        Usuarios usuario = (Usuarios)Session["Usuario"];
        if (usuario != null)
        {
            if(!IsPostBack)
            {
                bool editar = usuario.VerificarPermisoUsuario("Solapa 1: Orden de Trabajo", false, true);
                bool leer = usuario.VerificarPermisoUsuario("Solapa 1: Orden de Trabajo", true, false);

                ddlAltaModifica.Items.Clear();
                ddlAltaModifica.Items.Add("");

                if (editar)
                    ddlAltaModifica.Items.Add("Alta");
                if (leer)
                    ddlAltaModifica.Items.Add("Modifica");
            }
        }
    }

    protected void ddlAltaModifica_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            switch (this.ddlAltaModifica.SelectedItem.Text)
            {
                case "":
                    this.panelModificar.Visible = false;
                    break;
                case "Alta":
                    this.panelModificar.Visible = false;
                    break;
                case "Modifica":
                    this.panelModificar.Visible = true;
                    break;
            }

        }
        catch{}

    }
    protected void btnAceptar_Click(object sender, EventArgs e)
    {
        try
        {

            switch (this.ddlAltaModifica.SelectedItem.Text)
            {
                case "":
                    mostrarMensaje("Seleccione una operación a realizar.");
                    break;
                case "Alta":
                    Session["idOt"] = "0";
                    Response.Redirect("../tabOrdenTrabajo/ordenTrabajo.aspx", false);
                    break;
                case "Modifica":
                    if (CValidaDatos.validaEntero(this.txtNroOt.Text.Trim()))
                    {
                        string nroOt = this.txtNroOt.Text.Trim();

                        this.lblNroOt.Visible = false;
                        this.txtNroOt.ToolTip = null;

                        if (comprobarNroOt(nroOt))
                        {
                            Session["idOt"] = nroOt;

                            string url = dirigirAPestanias(nroOt);

                            if (!string.IsNullOrEmpty(url))
                            {
                                //llamo función de javascript en cliente y le paso la dirección a redirigir
                                ClientScript.RegisterStartupScript(this.GetType(), "mostrarVentanaMotivoModificacion", "<script>javascript:mostrarVentanaMotivoModificacion('" + url + "');</script>");
                            }
                            else
                            {
                                mostrarMensaje("No posee los permisos requeridos para poder ingresar.");
                            }
                        }
                        else
                        {
                            this.lblNroOt.Visible = true;
                            this.txtNroOt.ToolTip = "La Orden de Trabajo no existe o se encuentra anulada.";
                        }
                    }
                    else
                    {
                        this.lblNroOt.Visible = true;
                        this.txtNroOt.ToolTip = "Debe ingresar un Nº de OT.";
                    }
                    break;
            }

        }
        catch { }
    }

    private bool comprobarNroOt(string idOt)
    {
        bool existe = false;

        try
        {
            if (comprobar(idOt))
            {
                existe = true;
            }
        }
        catch 
        {
            existe = false;
            mostrarMensaje("No se puede procesar en este momento la solicitud. Intentelo mas tarde.");
        }

        return existe;
    }


    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        this.ddlAltaModifica.SelectedIndex = 0;
        this.txtNroOt.Text = "";
        this.panelModificar.Visible = false;
    }


    private bool comprobar(string dato)
    {
        SqlCommand command = new SqlCommand();

        command.CommandType = CommandType.Text;
        command.CommandText = "IF EXISTS (SELECT 1 FROM OTCab WHERE Id = @dato) SELECT 1 ELSE SELECT 0";

        command.Parameters.Clear();

        command.Parameters.AddWithValue("@dato", dato.Trim());


        DataTable dt = new CDarDataSet().darDataTable(command);


        if (dt != null)
        {
            try
            {
                if (dt.Rows[0][0] != null)
                    return Convert.ToBoolean(dt.Rows[0][0]);
                else
                    return false;
            }
            catch { }

        }

        return false;

    }


    private string dirigirAPestanias(string IdOtCab)
    {
        string consulta = "IF EXISTS(SELECT * FROM EstadosOT WHERE IdOtCab = @IdOtCab) BEGIN SELECT CASE WHEN OrdenTrabajo = 1 THEN 1 ELSE 0 END AS 'OrdenTrabajo', CASE WHEN InsumosAsociados = 1 THEN 1 ELSE 0 END AS 'InsumosAsociados', CASE WHEN Transporte = 1 THEN 1 ELSE 0 END AS 'Transporte', CASE WHEN RemitoGenerado = 1 THEN 1 ELSE 0 END AS 'RemitoGenerado', CASE WHEN NroRemitoAsignado = 1 THEN 1 ELSE 0 END AS 'NroRemitoAsignado', CASE WHEN RequisicionOc = 1 THEN 1 ELSE 0 END AS 'RequisicionOc', CASE WHEN FacturaAsignada = 1 THEN 1 ELSE 0 END AS 'FacturaAsignada', CASE WHEN ElementosDesvinculados = 1 THEN 1 ELSE 0 END AS 'ElementosDesvinculados', CASE WHEN Anulada = 1 THEN 1 ELSE 0 END AS 'Anulada' FROM EstadosOT WHERE IdOtCab = @IdOtCab END      ELSE BEGIN SELECT 0 AS 'OrdenTrabajo', 0 AS 'InsumosAsociados', 0 AS 'Transporte', 0 AS 'RemitoGenerado', 0 AS 'NroRemitoAsignado', 0 AS 'RequisicionOc', 0 AS 'FacturaAsignada', 0 AS 'ElementosDesvinculados', 0 AS 'Anulada' END";

        SqlCommand command = new SqlCommand();


        command.CommandType = CommandType.Text;
        command.CommandText = consulta;

        command.Parameters.Clear();

        command.Parameters.Add(new SqlParameter("@IdOtCab", SqlDbType.Int));
        command.Parameters["@IdOtCab"].Value = IdOtCab;

        DataTable tabla = new CDarDataSet().darDataTable(command);


        if (tabla != null)
        {

            Usuarios usuario = (Usuarios)Session["Usuario"];
            if (usuario != null)
            {

                /*para poder redirigir tiene que estar habilitada la pestaña y tener permiso para ingresar*/
                if (!Convert.ToBoolean(tabla.Rows[0]["OrdenTrabajo"]) && usuario.VerificarPermisoUsuario("Solapa 1: Orden de Trabajo", true, true))
                {
                    return "../tabOrdenTrabajo/ordenTrabajo.aspx";
                }

                if (!Convert.ToBoolean(tabla.Rows[0]["InsumosAsociados"]) && usuario.VerificarPermisoUsuario("Solapa 2: Insumos Asociados", true, true))
                {
                    return "../tabOrdenTrabajo/insAsociados.aspx";
                }

                if (!Convert.ToBoolean(tabla.Rows[0]["Transporte"]) && usuario.VerificarPermisoUsuario("Solapa 3: Pedido de Transporte", true, true))
                {
                    return "../tabOrdenTrabajo/transporte.aspx";
                }

                if (!Convert.ToBoolean(tabla.Rows[0]["RemitoGenerado"]) && usuario.VerificarPermisoUsuario("Solapa 4: Remito", true, true))
                {
                    return "../tabOrdenTrabajo/remito.aspx";
                }

                if (!Convert.ToBoolean(tabla.Rows[0]["NroRemitoAsignado"]) && usuario.VerificarPermisoUsuario("Solapa 5: Asigna N° Remito", true, true))
                {
                    return "../tabOrdenTrabajo/asignaNroRemito.aspx";
                }

                if (!Convert.ToBoolean(tabla.Rows[0]["RequisicionOc"]) && usuario.VerificarPermisoUsuario("Solapa 6: Requisición y OC", true, true))
                {
                    return "../tabOrdenTrabajo/requisicionOc.aspx";
                }

                if (!Convert.ToBoolean(tabla.Rows[0]["FacturaAsignada"]) && usuario.VerificarPermisoUsuario("Solapa 7: Factura Proveedor", true, true))
                {
                    return "../tabOrdenTrabajo/facProveedor.aspx";
                }

                if (!Convert.ToBoolean(tabla.Rows[0]["ElementosDesvinculados"]) && usuario.VerificarPermisoUsuario("Solapa 9: Desvincular Elementos e Insumos", true, true))
                {
                    return "../tabOrdenTrabajo/desvincularElementos.aspx";
                }

                if (!Convert.ToBoolean(tabla.Rows[0]["Anulada"]) && usuario.VerificarPermisoUsuario("Solapa 10: Anula OT", true, true))
                {
                    return "../tabOrdenTrabajo/anulaOt.aspx";
                }


                if (usuario.VerificarPermisoUsuario("Solapa 8: Estados OT", true, true))
                {
                    return "../tabOrdenTrabajo/estadoOt.aspx";
                }
            }
        }

        return null; 
    }

}